Ver2024.2 以降の Tableau Server から PrivateLink 経由で Snowflake OAuth を使用して接続する

Ver2024.2 以降の Tableau Server から PrivateLink 経由で Snowflake OAuth を使用して接続する

Clock Icon2024.09.20

はじめに

Tableau Server では、AWS PrivateLink などプライベート接続経由で Snowflake OAuth を使用した接続が可能です。バージョン2024.2 以降の Tableau Server では、このためにカスタムクライアント用の Snowflake OAuth の構成が必要です。こちらを試してみましたので記事としました。

Snowflake OAuth による接続

それぞれ以下に記載がありますが、2020.4 以降の Tableau Server ではプライベート接続経由で OAuth を使用可能です。

https://help.tableau.com/current/pro/desktop/ja-jp/snowflake_oauth.htm#snowflake-と-tableau-の間の-oauth-の構成

https://community.snowflake.com/s/article/Snowflake-Tableau-Authentication-Options-Limitation

OAuth 構成時の Tableau Server 側のデフォルトオプションとしてバージョン 2024.1 までは共通のクライアント ID とシークレットを使用する OAuth プロキシが使用されていました。
他にも、2020.4 から Tableau Server インスタンス上で実行される OAuth サービスを使用するように構成するオプションも提供されていました。

2024.2 以降では、この内共通のクライアント ID とシークレットを使用する方式が非推奨とされました。このため、Tableau Server インスタンス上で実行される OAuth サービスを使用することになりますが、構成時に独自のクライアント ID とシークレットを提供することが必須となります。Snowflake ではカスタムクライアント用の Snowflake OAuth の構成を行うことで、これに対応できます。
この点については以下に記載があります。

https://help.tableau.com/current/server/en-us/config_oauth_snowflake.htm

前提条件

以下の環境で検証を行いました。

  • Snowflake
    • Business Critical エディション
    • PrivateLink の設定を行い VPC 内からプライベート接続用の URL 接続できる状態としています
  • Tableau Server
    • バージョン:2024.2.2
    • OS:Windows Server 2019
    • ALB 配下にインストール
      • SSL オフロードにより HTTPS 要求は ALB で終了し、HTTP 経由で Tableau Server と通信を行う
    • EC2 に Snowflake ODBC Driver をインストール済み

下図の構成で検証を行いました。

image

Snowflake の PrivateLink 設定手順と上記構成での Tableau Server インストール手順は以下をご参照ください。

https://dev.classmethod.jp/articles/snowflake-aws-privatelink-snowflakedb/

https://dev.classmethod.jp/articles/tableau-server-alb-install-202310/

カスタムOAuth統合の作成

Snowflake でのカスタムクライアント用の OAuth 構成については以下に記載があります。

https://docs.snowflake.com/ja/user-guide/oauth-custom

統合オブジェクトを作成するので、デフォルトでは ACCOUNTADMIN での操作が必要です。ここでは以下のコマンドでセキュリティ統合オブジェクトを作成しました。

USE ROLE ACCOUNTADMIN;

CREATE SECURITY INTEGRATION oauth_tableau_server_privatelink
  TYPE = OAUTH
  ENABLED = TRUE
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
  OAUTH_REDIRECT_URI = 'https://<Tableau ServerのFQDN>/auth/add_oauth_token'
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 7776000
  ;

CREATE SECURITY INTEGRATION の詳細なオプションは以下に記載があります

https://docs.snowflake.com/ja/sql-reference/sql/create-security-integration-oauth-snowflake

ここでのポイントとしてOAUTH_REDIRECT_URI にはhttps://<Tableau ServerのFQDN>/auth/add_oauth_token を指定します。ここで指定する URI は TLS で保護されている必要があります。
統合オブジェクトを作成後、以下のコマンドを実行し、Tableau Server 側での構成に必要なクライアント ID やシークレットを取得します。


>select system$show_oauth_client_secrets('<統合オブジェクトの名称>');
{
	"OAUTH_CLIENT_SECRET_2":"XXXXX",
	"OAUTH_CLIENT_SECRET":"XXXXX",
	"OAUTH_CLIENT_ID":"XXXXX"
}

Tableau Server 側の構成

こちらの手順は以下に記載があります。TSM(Tableau Services Manager)での操作が必要なので、OS に管理者権限を持つユーザーログインします。

https://help.tableau.com/current/server/ja-jp/config_oauth_snowflake.htm

※バージョン 2024.1 以前:Snowflake OAuth サービスを有効化

バージョン 2024.1 以前の Tableau Server の場合、以下のコマンドを実行し、Snowflake OAuth サービスを有効にします。

tsm configuration set -k native_api.enable_snowflake_privatelink_on_server -v true

ここではバージョン2024.2を使用しているためこの手順はスキップしました。

Snowflake OAuth サービスを構成する

ドキュメントにも記載がある以下のコマンドの設定値を自身の環境の値に置き換えます。

tsm configuration set -k oauth.snowflake.clients -v " [{\"oauth.snowflake.instance_url\":\"https://account.snowflakecomputing.com\", \"oauth.snowflake.client_id\":\"client_id_string\", \"oauth.snowflake.client_secret\":\"client_secret_string\", \"oauth.snowflake.redirect_uri\":\"http://your_server_url.com/auth/add_oauth_token\" }]"

それぞれ以下のように置き換えます。

  • oauth.snowflake.instance_url
    • Snowflake へのプライベート接続に使用するURL
    • 例:https://<account_identifier>.us-east-1.privatelink.snowflakecomputing.com
  • oauth.snowflake.client_id
  • oauth.snowflake.client_secret
    • SYSTEM$SHOW_OAUTH_CLIENT_SECRETS で取得できる統合のクライアントシークレット
  • oauth.snowflake.redirect_uri
    • 統合オブジェクト作成時に指定した OAUTH_REDIRECT_URI と同じ値を指定
    • 例:https://<Tableau ServerのFQDN>/auth/add_oauth_token

注意点として、二重引用符は\" のようにエスケープする必要があります。また複数の Snowflake アカウント の URL を指定可能です。

設定値は以下で確認できます。

tsm configuration get -k oauth.snowflake.clients

設定を反映させるには以下を実行します。途中、Tableau Server が再起動されます。

tsm pending-changes apply

OAuth 接続を行う

ここでは Tableau Server をインストールしたインスタンス上のブラウザで Tableau Server にログインし、パブリッシュされたデータソースを作成してみます。

以下のようにプライベート接続用の URL を指定し「Authentication」として「Sign in using OAuth」を指定します。

image 1

Snowflake へのログイン画面が開くので認証情報を入力します。

image 2

下図のポップアップが表示されるのでアクセスを許可します。

image 3

これにより OAuth で接続することができました。

image 4

ここでは抽出を作成し、スケジュール更新してみました。

image 5

Snowflake 側で対象のテーブルを更新しジョブの実行時間になると問題なく実行されていました。

image 6

更新後のデータ

image 7

構成時の注意点

本構成にあたり OAUTH_REDIRECT_URI にhttps://<Tableau ServerのFQDN>/auth/add_oauth_token とあるように Tableau Server に HTTPS でアクセスできる必要があります。

本記事では、ELB に ACM を紐づける形で HTTPS で接続できるようにしています。そのため、Tableau Server にログインしデータソースを作成する際も、この HTTPS 経路を通してアクセスする必要があります。ここでは、Tableau Server がインストールされたインスタンスのブラウザからデータソースを作成したため、ALB のセキュリティグループに、NATゲートウェイの EIP(Elastic IP)からの通信を許可する設定を行いました。

また、Tableau Server に SSL 証明書を直接登録して SSL 化することも可能です。この場合、VPC 内で、HTTPS 経由でアクセスする URL に対して正しく名前解決が行われるように DNS 設定が必要です。

Tableau Desktop

それぞれ以下に記載がありますが、Tableau Desktop では、プライベート URL を使用するかどうかに関係なく、引き続きパートナーアプリケーション統合を使用できます。

https://docs.snowflake.com/en/user-guide/oauth-partner

https://help.tableau.com/current/pro/desktop/ja-jp/snowflake_oauth.htm

さいごに

バージョン2024.2 の Tableau Server から PrivateLink 経由で Snowflake OAuth を使用して接続してみました。Tableau Server には HTTPS で接続できる必要があるので、構成によっては注意が必要と感じました。こちらの内容が何かの参考なれば幸いです。

参考

https://help.tableau.com/current/server-linux/en-us/whatsnew_server.htm

https://community.snowflake.com/s/article/Configuring-a-Snowflake-PrivateLink-Account-to-connect-to-Tableau-Server-via-Snowflake-OAuth-for-Custom-Clients

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.